home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MYUTIL / PRGLOADE.D < prev    next >
Encoding:
Modula Definition  |  1991-02-21  |  3.4 KB  |  97 lines

  1. DEFINITION MODULE PrgLoader;
  2.  
  3. (*
  4.  * Mini-Version des "Loader"-Moduls von Megamax Modula-2.
  5.  *
  6.  * Dieses Modul kann nur Programme im GEMDOS-Format resident laden
  7.  * und starten, jedoch keine einzelnen Module.
  8.  *
  9.  * Das Modul wurde am 20.12.90 erstellt von
  10.  *   Thomas Tempelmann, Nordendstr. 64, D-8000 München 40.
  11.  * Es wurde mit Megamax Modula-2 (Version 2.2) entwickelt.
  12.  *)
  13.  
  14. FROM SYSTEM IMPORT ADDRESS, BYTE;
  15.  
  16. TYPE LoaderResults = (noError,       (* kein Fehler - Prg. geladen *)
  17.                       alreadyLoaded, (* Programm ist bereits geladen *)
  18.                       notFound,      (* Programmdatei nicht vorhanden *)
  19.                       outOfMemory,   (* Speicher reicht nicht *)
  20.                       badFile);      (* keine oder defekte Programmdatei *)
  21.  
  22.      ArgStr = ARRAY [0..127] OF BYTE; (* fertige Arg-Zeile im GEMDOS-Format *)
  23.  
  24.  
  25. VAR  UsedHeapSize: LONGCARD;          (* = MAX(LONGCARD), wenn kein Mshrink *)
  26.  
  27.  
  28. PROCEDURE LoadProgram (    name    : ARRAY OF CHAR;
  29.                            heapSize: LONGCARD;
  30.                        VAR result  : LoaderResults);
  31. (*
  32.  * Lädt ein Programm mit der angegeben Heap-Größe.
  33.  * Ergebnis in 'result'.
  34.  *)
  35.  
  36. PROCEDURE UnLoadProgram (    name    : ARRAY OF CHAR;
  37.                          VAR result  : LoaderResults);
  38. (*
  39.  * Gibt geladenes Programm frei.
  40.  * Ergebnis in 'result'.
  41.  *)
  42.  
  43. PROCEDURE Arg (REF text: ARRAY OF CHAR): ArgStr;
  44. (*
  45.  * Erzeugt aus einer Argumentzeile (max. 125 Zeichen lang!) den für
  46.  * 'CallProgram' benötigten Argumentstring im GEMDOS-Format.
  47.  *)
  48.  
  49. CONST NoArg = ArgStr {BYTE(0) BY 128};
  50.       NoEnv = ADDRESS (0);
  51.  
  52. PROCEDURE CallProgram (    name       : ARRAY OF CHAR;
  53.                        REF argLine    : ArgStr;
  54.                            environment: ADDRESS;
  55.                        VAR exitCode   : LONGINT);
  56. (*
  57.  * Startet Programm, auch wenn es nicht geladen ist.
  58.  * 'argLine' erhält die Command Line im GEMDOS-Format. Mit der obigens
  59.  * Funktion "Arg" kann ein normaler Modula-String in dieses Format
  60.  * konvertiert werden. Soll kein Argument übergeben werden, kann "NoArg"
  61.  * verwendet werden.
  62.  * 'environment': Wenn Sie nicht wissen, wozu das gut ist, brauchen Sie's
  63.  * auch nicht. Übergeben Sie dann einfach "NoEnv".
  64.  * Ergebnis kommt in 'exitCode', wie bei Pexec().
  65.  *)
  66.  
  67. PROCEDURE ProgramLoaded (filename: ARRAY OF CHAR): BOOLEAN;
  68. (*
  69.  * Liefert TRUE, wenn Programm geladen ist
  70.  *)
  71.  
  72.  
  73. TYPE QueryPrgProc = PROCEDURE (REF (*name       :*) ARRAY OF CHAR,
  74.                                    (*noOfRuns   :*) CARDINAL,
  75.                                    (*currentHeap:*) LONGCARD,
  76.                                    (*neededHeap :*) LONGCARD ): BOOLEAN;
  77.  
  78. (*$H+*)
  79. PROCEDURE QueryLoaded (call: QueryPrgProc);
  80. (*
  81.  * Ruft die in 'call' übergebene Prozedur für alle derzeit geladenen
  82.  * Programm jeweils einmal auf.
  83.  * Parameter zu 'call':
  84.  *   'name': Name des Programms.
  85.  *   'noOfRuns': Anzahl, wie oft das geladene Programm schon gestartet wurde.
  86.  *   'currentHeap': Ist das Programm noch nicht gestartet worden, ist
  87.  *      hier die im Parameter 'heapSize' von 'LoadProgram' angegebene
  88.  *      Heap-Größe enthalten, sonst die durch den Mshrink-Aufruf selbst
  89.  *      eingestellte Größe.
  90.  *   'neededHeap': Ist MAX (LONGCARD), bis das Programm gestartet wurde
  91.  *      und mind. einmal 'Mshrink' aufgerufen hat.
  92.  * 'call' kann FALSE zurückgeben, um die Aufrufe zu evtl. weiteren geladenen
  93.  *   Programmen abzubrechen.
  94.  *)
  95.  
  96. END PrgLoader.
  97.